package com.ljl.Test;

import io.minio.MinioClient; // 导入MinIO客户端类
import io.minio.PutObjectArgs; // 导入PutObjectArgs构建器，用于构建上传对象的参数
import io.minio.errors.MinioException; // 导入MinIO异常类，用于处理MinIO操作中可能抛出的异常

import java.io.FileInputStream; // 导入FileInputStream类，用于读取本地文件
import java.io.IOException; // 导入IOException类，用于处理文件操作中可能抛出的异常
import java.security.InvalidKeyException; // 导入InvalidKeyException类，用于处理无效密钥异常
import java.security.NoSuchAlgorithmException; // 导入NoSuchAlgorithmException类，用于处理无此算法异常

public class MinioUpload {
    // 定义MinIO服务器的端点、访问密钥和密钥ID
    private static final String HOST = "http://localhost:8091";
    private static final String ACCESS_KEY = "pjl";
    private static final String SECRET_KEY = "pjlABC123";

    public static void main(String[] args) {
        try {
            // 创建MinIO客户端实例
            MinioClient minioClient = MinioClient.builder()
                    .endpoint(HOST) // 设置MinIO服务的端点地址
                    .credentials(ACCESS_KEY, SECRET_KEY) // 设置访问和密钥ID
                    .build();

            // 定义存储桶名称、对象名称和本地文件路径
            String bucketName = "mybucket";
            String objectName = "class11_img_file/img/imgbca60fc9-42ae-4fee-a3df-df98dcdbb6d4.png";
            String filePath = "/Users/ljl/Documents/JavaEE/Spring_MVC_class9/target/Spring_MVC_class9/imgbca60fc9-42ae-4fee-a3df-df98dcdbb6d4.png";

            // 使用try-with-resources语句确保FileInputStream正确关闭
            try (FileInputStream stream = new FileInputStream(filePath)) {
                // 获取文件大小
                long fileSize = stream.available();

                // 使用PutObjectArgs.builder()构建上传参数
                minioClient.putObject(
                        PutObjectArgs.builder()
                                .bucket(bucketName) // 设置存储桶名称
                                .object(objectName) // 设置对象名称
                                .stream(stream, fileSize, -1) // 设置文件输入流、文件大小和部分大小
                                .contentType("image/jpeg") // 设置内容类型为JPEG图片
                                .build() // 构建PutObjectArgs对象
                );

                // 上传成功后的提示信息
                System.out.println("File '" + objectName + "' is successfully uploaded.");
            } catch (IOException e) {
                // 处理文件输入输出异常
                System.out.println("Error occurred: " + e);
            } catch (NoSuchAlgorithmException e) {
                // 处理无此算法异常
                throw new RuntimeException(e);
            } catch (InvalidKeyException e) {
                // 处理无效密钥异常
                throw new RuntimeException(e);
            }
        } catch (MinioException e) {
            // 处理MinIO操作异常
            System.out.println("Error occurred: " + e);
        }
    }
}